#include"BlockQueue.hpp"
#include"Task.hpp"
#include<vector>
#include<unistd.h>
//consumer
//productor
void* consumer(void* args)//消费者
{
    BlockQueue<task_t>* bq = static_cast<BlockQueue<task_t> *>(args);
    while(true)
    {
        
        task_t t = bq->Pop();
        t();
        sleep(1);
    }
}
void* productor(void* args)//生产者
{
    BlockQueue<task_t>* bq = static_cast<BlockQueue<task_t> *>(args);
    while(true)
    {
        bq->Equeue(Download);
    }
}
int main()
{
    BlockQueue<task_t>* q = new BlockQueue<task_t>();
    //创建线程
    pthread_t p[2],c[3];

    pthread_create(&c[0],nullptr,consumer,q);
    sleep(1);
    pthread_create(&c[1],nullptr,consumer,q);
    sleep(1);
    pthread_create(&c[2],nullptr,consumer,q);
    sleep(1);
    pthread_create(&p[0],nullptr,productor,q);
    sleep(1);
    pthread_create(&p[1],nullptr,productor,q);
    sleep(1);

    pthread_join(c[0],nullptr);
    pthread_join(c[1],nullptr);
    pthread_join(c[2],nullptr);
    pthread_join(p[0],nullptr);
    pthread_join(p[1],nullptr);



    return 0;
}